/*CODIGO JFLEX*/
/*AREA DE IMPORTACION*/
import java.io.*;
import java_cup.runtime.*;

/*CLASE DATOS*/

class Datos{
	public static String nombreArchivo = ""; //contendra el nombre del codigo que se esta revizando	
	public static String palabra = ""; //el token que se esta revizando
	public static String codigoCorrecto = ""; //el codigo para la impresion
	public static int fila = 1; //fila actual
	public static int columna = 1; //columna actual
		
	//metodo que escribe la salida en un archivo e texto: "entrada.txt"
	public static void escribe(String archivo, String textos){
      
         try{          
            FileWriter file1 = new FileWriter(archivo+".txt");
         
            BufferedWriter buff = new BufferedWriter(file1);
         
            buff.write(textos);
            buff.newLine();
         
            buff.close();
            file1.close();
		System.out.println("Se imprimio el codigo en: "+archivo+".txt");
            }
            catch(IOException e){
               System.out.println("Error: no se puede escribir la salida");
            }
      }
}

%%

%line
%column
%cup

%{
	Datos datos = new Datos();
%}

%eof{
	datos.codigoCorrecto += "\n";	
%eof}

/*expresiones regulares*/

numero         =          [0-9]+
opsuma         =          "+"|"-"
opmult         =	  "*"|"/"

/*AREA DE REGLAS*/
%%

<YYINITIAL>
	{

{numero} 		{
			  datos.palabra = yytext();
			  datos.fila = yyline;
			  datos.columna = yycolumn;
		          datos.codigoCorrecto += yytext()+" ";	
			  return new Symbol(sym.NUMERO, new String(yytext()));
	  		}
{opsuma} 		{
			  datos.palabra = yytext();
			  datos.fila = yyline;
			  datos.columna = yycolumn;
		          datos.codigoCorrecto += yytext()+" ";	
			  return new Symbol(sym.OPSUMA, new String(yytext()));
			}
{opmult} 		{
			  datos.palabra = yytext();
			  datos.fila = yyline;
			  datos.columna = yycolumn;
		          datos.codigoCorrecto += yytext()+" ";	
			  return new Symbol(sym.OPMULT, new String(yytext()));
			}
	}

[^] 			{	
			  System.out.println(
			  "<"+datos.nombreArchivo+">: Error Lexico ("+yyline+","+yycolumn+"): lexema \"<"+yytext()+">\" no valido");
			}
	
